class VacacionesController < ApplicationController
  #MODULE: Vacaciones

  # GET /vacaciones
  # GET /vacaciones.xml
  def index
    @vacaciones = Vacacion.all
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @vacaciones }
    end
  end

  # GET /vacaciones/1
  # GET /vacaciones/1.xml
  def show
    @vacacion = Vacacion.find(params[:id])
    
    respond_to do |format|
      format.html # show.html.erb
      format.js { render :layout => false}
      format.xml  { render :xml => @vacacion }
    end
  end

  # GET /vacaciones/new
  # GET /vacaciones/new.xml
  def new
    @vacacion = Vacacion.new()
    @vacacion.usuario_id = params[:usuario_id]
    @existentes=[]
    respond_to do |format|
      format.js   {render :layout => false}
    end
  end

  # GET /vacaciones/1/edit
  def edit
    @vacacion = Vacacion.find(params[:id])
    @existentes=[]
    respond_to do |format|
      format.html
      format.js   {render :layout => false}
    end
  end

  # POST /vacaciones
  # POST /vacaciones.xml
  def create
    @vacacion = Vacacion.new(params[:vacacion])
    
    respond_to do |format|
      if @vacacion.save
        format.html {
          flash[:notice] =  'Vacacion creada correctamente.'
          params[:oper].nil? ? redirect_to(@vacacion) : render(:text => "Ok")}
        format.js   {actualizar_view}
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @vacacion.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /vacaciones/1
  # PUT /vacaciones/1.xml
  def update
    @vacacion = Vacacion.find(params[:id])

    respond_to do |format|
      if @vacacion.update_attributes(params[:vacacion])
        format.html {
          flash[:notice] = 'Vacacion actualizado correctamente.'
          redirect_to(@vacacion)
          
        }
        format.xml  { head :ok }
        format.js   {actualizar_view}
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @vacacion.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /vacaciones/1
  # DELETE /vacaciones/1.xml
  def destroy
    @vacacion = Vacacion.find(params[:id])
    @usuario=@vacacion.usuario
    @vacacion.destroy

    respond_to do |format|
      format.html {redirect_to @usuario}
      format.js {@vacaciones=@usuario.vacaciones}
    end
  end
  #AJAX
  def usuarios_por_vacacion #IGNORE
    unless (params[:desde].blank? or params[:hasta].blank?)
      ini = Date.strptime(params[:desde],"%d/%m/%Y")
      fin = Date.strptime(params[:hasta],"%d/%m/%Y")
      cargo=Cargo.find(params[:cargo_id])
      html = <<HTML
HTML
      clase='even'
      rows=[]
      Vacacion.en_periodo(ini,fin).each do |v|
        clase = clase == 'even' ? 'odd' : 'even'
        if cargo.area.cargos.include?(v.usuario.cargo)
          rows<<"<tr class='#{clase}'><td width=30%>#{v.usuario.nombre}</td>"
          rows<<"<td>#{v.desde}</td>"
          rows<<"<td>#{v.hasta}</td></tr>"
        end
      end
      if rows.empty?
        html.concat("<tr><td><small>No existen vacaciones que se solapen en el periodo seleccionado</small></td></tr>")
      else
        html.concat("<thead><tr><th>Funcionario</th><th>Desde</th> <th>Hasta</th></tr></thead>")
        html.concat(rows.join(''))
      end
      render :update do |page|
        page.replace_html :datos,html
      end
    else
      render :nothing => true
    end
  end

  def resumen #DESC: Ver el resumen de vacaciones por area.
    if request.method == :post and !params[:area][:id].blank?
      desde=Date.new(params[:date][:year].to_i,1,1)
      hasta=Date.new(params[:date][:year].to_i,12,31)
      funcionarios=params[:cargo][:id].blank? ? Usuario.activos.find_all_by_area_id(params[:area][:id]) : Usuario.activos.find_all_by_cargo_id(params[:cargo][:id])
      @vacaciones=[]
      funcionarios.each{ |u| @vacaciones<< u.vacaciones.por_anio(desde,hasta)}
      @vacaciones.flatten!
      @vacaciones.sort!{ |a,b| a.desde <=> b.desde }
    end
  end

  def actualizar_view
    @usuario=@vacacion.usuario
    @vacaciones=@vacacion.usuario.vacaciones
    @action_name="edit"
    render :update do |page|
      page.replace_html "vacaciones", :file => "vacaciones/index"
      page.visual_effect(:highlight, "tr-vacacion-#{@vacacion.id}", :duration=>2.5)
      page << "makeColorBox()"
    end
  end
end
